package com.example.kotlinstudy.knowledges


fun back() {
    // 函数api测试
    // 定义 list 存入数字，正数，负数
    val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1, -2, -3, -4, -5)
    // 依次帮我测试 max,min,sum,sort,倒序，any，all 帮我加上注释
    // max 最大值
    println(list.max())
    // min 最小值
    println(list.min())
    // sum 总和
    println(list.sum())
    // sorted 排序
    println(list.sorted())
    // sortedDescending 倒序
    println(list.sortedDescending())
    // any 任意一个满足
    println(list.any { it > 0 })
    // all 全部满足
    println(list.all { it > 0 })

    // 使用 list数组帮我依次测试 如下方法mар,filter,forEach,let,apply,also,takeIf,run,with,firstOrNull
    // map测试 映射
    println(list.map { it * 2 })
    // filter
    println(list.filter { it > 0 })
    // ForEach
    list.forEach {
        println(it)
    }
}

// helloYou
fun runLetWith() {
    // let
    var food: String? = null
    food = "隆江猪脚饭"
    // 不为空 才会执行 let块中的逻辑
    // let块 用it 可以快速获取
    food?.let {
        // 前面是安全调用，后面是let函数
        println("哇塞")
        println(it.length)
        println(it)
    }

    class Student {
        fun sing() {
            println("只因你太美")
        }

        fun dance() {
            println("铁山靠")
        }

        fun rap() {
            println("你有 freestyle")
        }

        fun play() {
            println("打篮球")
        }
    }

    val s = Student()
    s.sing()
    s.dance()
    s.rap()
    s.play()
    println("-----------------")
    with(s) {
        sing()
        dance()
        rap()
        play()
    }

    var res = run {
        // 局部变量 外部 无法访问
        // 不受外部影响的执行一些逻辑
        var secret = "我有一个小秘密"
        var secret2 = "就不告诉你"
        // 代码末尾的内容会作为返回值
        secret + secret2
    }
    println(res)
}

// 入口函数
fun main() {
    class Phone {
        var ram: Int = 12
        var rom: Int = 512
        var cpu: String = "骁龙888"
        var apps = mutableListOf("微信", "抖音", "QQ")
    }

    val hwPhone = Phone().apply {
        ram = 32
        rom = 1024
        cpu = "麒麟9020"
        apps = mutableListOf("王者荣耀", "金铲铲", "逆水寒")
        // 自动将传建好的内容 包装到一个新的对象中 并返回
    }
    println(hwPhone.apps)
    println(hwPhone.ram)
    println(hwPhone.rom)
    println(hwPhone.cpu)
}
